package io.github.talelin.latticy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.github.talelin.latticy.bo.LocationByAreaVo;
import io.github.talelin.latticy.dto.location.LocationDTO;
import io.github.talelin.latticy.dto.location.UpdateLocationDTO;
import io.github.talelin.latticy.model.LocationDO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 仓库 服务类
 * </p>
 *
 * @author generator@wulongbo
 * @since 2022-06-07
 */
public interface LocationService extends IService<LocationDO> {

    /**
     * 新建库位
     *
     * @param dto 新建库位校验器
     * @return 被创建的库位
     */
    LocationDO createLocation(LocationDTO dto);

    /**
     * 更新库位
     *
     * @param id  库位id
     * @param dto 库位信息
     * @return 是否成功
     */
    boolean updateLocation(int id, UpdateLocationDTO dto);

    /**
     * 删除库位
     *
     * @param id 库位id
     * @return 是否成功
     */
    boolean deleteLocation(int id);

    /**
     * 查询库位
     *
     * @param id 库位id
     * @return 查询的库位
     */
    LocationDO getLocationById(int id);


    /**
     * 根据区域查询所有库位
     *
     * @param areaId 库位id
     * @return
     */
    List<LocationDO> getLocationAreaList(List<Integer> areaIdList);

    /**
     * 根据idList查询库位
     * @param idList
     * @return
     */
    List<LocationByAreaVo> getLocationByIdList(List<Integer> idList);

    List<LocationDO> getLocationList(LocationDO locationDO);

    /**
     * 查询所有库位
     *
     * @param areaId 分区id
     * @param count
     * @param page
     * @return
     */
    IPage<LocationDO> getLocationPage(Integer page, Integer count, int areaId);

    /**
     * 根据库位id检查是否存在库位
     *
     * @param AreaId 库位id
     * @return true代表存在
     */
    boolean checkLocationExistByLocationId(int AreaId);

    /**
     * 校验排序唯一性
     *
     * @param id            库位id
     * @param locationOrder 库位排序
     * @return true代表存在
     */
    boolean checkLocationOrderExistById(int id, int locationOrder);

    /**
     * 校验库位唯一性
     *
     * @param areaId 区域id
     * @param name   库位名称
     * @return true代表存在
     */
    boolean checkLocationExistByLocationName(Integer areaId, String name);

    /**
     * 校验排序唯一性
     *
     * @param areaId        分区id
     * @param locationOrder 库位排序
     * @return true代表存在
     */
    boolean checkLocationOrderExistByAreaId(Integer areaId, int locationOrder);

}
